Add remaining limit column to Expensify Card table - #95041
Conversation
|
@linhvovan29546 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
@MelvinBot sync with main |
b674dd3 to
37e8afd
Compare
|
Synced with main via rebase (no conflicts). Reformatted per the new Oxfmt tooling and re-verified lint/typecheck/React Compiler compliance. |
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
@Expensify/design @joekaufmanexpensify here it is updates with the Remaining Limit
On narrow the Remaining limit would be with the Cut we can change that as well |
|
Yeah, it looks a bit jumbled to me. I'd probably vote to remove it on mobile. |
|
Yeah I agree with Joe, let's remove it on mobile. Desktop is looking pretty good, but it seems like the Last 4 column is huge and the name column is too small. Is there any way we can even out those columns a bit and give more space to the name column? @mountiny unrelated: The letter avatars in your screenshots look tiny - where did those come from? Just want to know if we need to do some follow up on those. |
|
Agree with all of those comments. We should be able to just hard code a width for the last 4 column, let's just do something similar to the Type or Limit width. |
|
@dannymcclain Georgia just submitted a fix for the tiny avatar letters and they are on staging. So a fresh pull of main should fix things. |
|
Actually maybe this is just our eyes playing tricks on us - limit is right aligned, last four is left aligned... so there is a big gap in between even if the columns are technically the same size, hence the perceived "wide column" effect? |
|
@dannymcclain I think this PR #95639 |
Co-authored-by: Cursor <cursoragent@cursor.com>
The column only ever renders four digits, so letting it take an equal 1fr share of the grid wasted horizontal space now that Status and Remaining limit also compete for it. Co-authored-by: Cursor <cursoragent@cursor.com>
The column header now reads Remaining rather than Remaining limit. This uses a new translation key instead of reusing expensifyCard.remainingLimit, because that key also labels the workspace-level summary card above the table and has to keep its longer wording. Type and Status get fixed widths so the space they were taking as equal 1fr tracks goes to the remaining flexible columns, most visibly Name. Co-authored-by: Cursor <cursoragent@cursor.com>
The grid track list ignored a column's styling.flex and gave every flexible column an equal 1fr, so the space reclaimed from Type, Last 4 and Status was split between Name, Limit type, Limit and Remaining rather than going where it was needed. Honoring styling.flex sends it to Name instead; no column set that property before, so every other table keeps its current layout. Co-authored-by: Cursor <cursoragent@cursor.com>
Sized to Pending order, the widest status string, so the extra padding it carried goes to the Name column instead. Co-authored-by: Cursor <cursoragent@cursor.com>
f915124 to
3af35f5
Compare
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
@linhvovan29546 can you check now please?
|
|
@mountiny It looks like there are no new changes. The Screen.Recording.2026-07-31.at.18.59.13.mov |
Last 4 holds four digits, so 88px left it visibly wider than its content
needs; 72px still fits the widest header label across locales ("4 últimos")
plus the sort arrow.
Status at 100px truncated the longest status values outside English, e.g.
"Bestellung ausstehend" and "Ordine in attesa" for statusPendingOrder.
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
|
sorry I see it was not pushed |
This comment has been minimized.
This comment has been minimized.
|
@shawnborton @dannymcclain @dubielzyk-expensify Could you confirm the table UI? Thanks! Screen.Recording.2026-07-31.at.22.24.39.mov |
|
Yeah I am not sure about the locales, some languages will always be longer than others for various columns and I think we should definitely not make the columns width language dependent now |
Looks good to me 👍 |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 MariaHCD has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/MariaHCD in version: 9.4.49-0 🚀
|
|
Docs update needed — draft PR created: #97742 This PR adds a Remaining column to the Expensify Card list (Workspaces > [Workspace] > Expensify Card), surfacing each card's remaining spending limit for admins. The help site already documents the columns of this same list (the "What the Status column shows in the Expensify Card list" section in Set-Up-and-Manage-the-Expensify-Card-US.md), so I added a matching section for the new column. What I changed and how I verified the label
@MelvinBot, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |








Explanation of Change
Adds a "Remaining limit" column to the Expensify Card table (next to the existing "Limit" column) so admins can see how much of each cardholder's limit is left without opening every card individually. The per-card remaining limit (
availableSpend) already exists in Onyx and is returned byOpenPolicyExpensifyCardsPage— this is a frontend-only change to surface it in the table (wide layout: new column; narrow layout: shown stacked next to the limit).Fixed Issues
$ #95036
PROPOSAL:
Tests
Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Not yet tested — needs manual QA.
Android: mWeb Chrome
Not yet tested — needs manual QA.
iOS: Native
Not yet tested — needs manual QA.
iOS: mWeb Safari
Not yet tested — needs manual QA.
MacOS: Chrome / Safari
Not yet tested — needs manual QA.